package cn.iocoder.yudao.module.exam.dal.dataobject.exam;

import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.module.exam.controller.admin.paper.vo.PaperRespVO;
import cn.iocoder.yudao.module.exam.utils.PaperRespVOTypeHandler;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 考试 DO
 *
 * @author 芋道源码
 */
@TableName(value = "exam_exam", autoResultMap = true)
@KeySequence("exam_exam_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ExamDO extends BaseDO {

    /**
     * 主键
     */
    @TableId
    private Long id;
    /**
     * 考试名称
     */
    private String examName;
    /**
     * 试卷id
     */
    private Long paperId;
    /**
     * 试卷名称
     */
    private String paperName;
    /**
     * 考试时长（分钟）
     */
    private Integer duration;
    /**
     * 总分
     */
    private BigDecimal totalScore;
    /**
     * 及格分数
     */
    private BigDecimal passingScore;
    /**
     * 开始时间
     */
    private LocalDateTime startTime;
    /**
     * 结束时间
     */
    private LocalDateTime endTime;
    /**
     * 结束设置 0 及格结束 1 不限次数 2 限制次数
     */
    private Integer endType;
    /**
     * 考试次数设置
     */
    private Integer testNum;
    /**
     * 成绩设置 0 最高分 1 最后一次
     */
    private Integer scoreType;
    /**
     * 版本号
     */
    private Integer version;
    /**
     * 单选题数量
     */
    private Integer singleChoiceNum;
    /**
     * 多选题数量
     */
    private Integer multipleChoiceNum;
    /**
     * 判断题数量
     */
    private Integer trueFalseNum;
    /**
     * 简答题数量
     */
    private Integer shortAnswerNum;
    /**
     * 问答题数量
     */
    private Integer essayNum;
    /**
     * 单选题分值
     */
    private BigDecimal singleChoiceScore;
    /**
     * 多选题分值
     */
    private BigDecimal multipleChoiceScore;
    /**
     * 多选题漏选分值
     */
    private BigDecimal multipleChoicePartialScore;
    /**
     * 判断题分值
     */
    private BigDecimal trueFalseScore;
    /**
     * 填空题总分
     */
    private BigDecimal fillTotalScore;
    /**
     * 单选题总分
     */
    private BigDecimal singleChoiceTotalScore;
    /**
     * 多选题总分
     */
    private BigDecimal multipleChoiceTotalScore;
    /**
     * 计算题数量
     */
    private Integer calculateNum;
    /**
     * 填空题数量
     */
    private Integer fillNum;
    /**
     * 简答题总分
     */
    private BigDecimal shortAnswerTotalScore;
    /**
     * 问答题总分
     */
    private BigDecimal essayTotalScore;
    /**
     * 计算题总分
     */
    private BigDecimal calculateTotalScore;
    /**
     * 简单题数
     */
    private Integer easyNum;
    /**
     * 一般题数
     */
    private Integer commonNum;
    /**
     * 中等题数
     */
    private Integer mediumNum;
    /**
     * 困难题数
     */
    private Integer difficultNum;
    /**
     * 极难题数
     */
    private Integer extremelyDifficultNum;
    /**
     * 简单总分
     */
    private BigDecimal easyTotalScore;
    /**
     * 一般总分
     */
    private BigDecimal commonTotalScore;
    /**
     * 中等总分
     */
    private BigDecimal mediumTotalScore;
    /**
     * 困难总分
     */
    private BigDecimal difficultTotalScore;
    /**
     * 极难总分
     */
    private BigDecimal extremelyDifficultTotalScore;
    /**
     * 出题类型 0 无 1 难易 2 知识点
     */
    private Integer testType;
    /**
     * 试卷类型 0 固定 1随机
     */
    private Integer paperType;
    /**
     * 试卷信息
     */
    @TableField(typeHandler = PaperRespVOTypeHandler.class)
    private PaperRespVO paperInfo;

}